/* #include <stdio.h>

const int N = 100005;

int n, m;             // n, m 鍗抽鐩弿杩颁腑 n, m
int ans;              // ans 瀛樻垜浠兘寰楀埌鐨勬渶澶х殑绛旀
int t[N];             // t 瀛樿緭鍏ョ殑 n 涓暟
short op[N];          // op 瀛?n 涓暟瀵瑰簲鐨勬搷浣滐紝1 琛ㄧず鎸変綅鎴栵紝2 琛ㄧず鎸変綅寮傛垨锛? 琛ㄧず涓?
char str[4];          // str 鐢ㄤ簬璇诲叆鎿嶄綔

bool calc(bool x,int j) //j浜岃繘鍒朵綅鏁版墍鍦紝x鏄～鐨勫唴瀹?                       // calc 鐢ㄤ簬璁＄畻 x 缁忚繃鎵€鏈夋暟鐨勭 j 浣嶆搷浣滃悗鎵€寰楀埌鐨勭粨鏋?
{
    for (int i = 0; i < n; i ++ )   //n琛ㄧずn鎵囬棬             // 浠?0 鍒?n 鏋氫妇鎵€鏈夎鍏ョ殑鏁颁笌鍏跺搴旀搷浣?
        if (op[i] == 1) x |= t[i] >> j & 1; //x=x|(t[i]>>j&1);     // 濡傛灉 op[i] 涓?1锛岃鏄庤鏁版墍瀵瑰簲鐨勮繍绠椾负鎸変綅鎴?
        else if (op[i] == 2) x ^= t[i] >> j & 1; // 濡傛灉 op[i] 涓?2锛岃鏄庤鏁版墍瀵瑰簲鐨勮繍绠椾负鎸変綅寮傛垨
        else    x &= t[i] >> j & 1;              // 濡傛灉 op[i] 涓?3锛岃鏄庤鏁版墍瀵瑰簲鐨勮繍绠椾负鎸変綅涓?
    return x;//杩斿洖x缁忚繃璁＄畻鐨勫€?
}

x=x|(t[i]>>j&1);
x=x^(t[i]>>j&1)
x=x&(t[i]>>j&1)



int main()
{
    scanf("%d %d", &n, &m);
    for (int i = 0; i < n; i ++ )//鑾峰彇杈撳叆鍐呭锛宱p鏄搷浣滃唴瀹癸紝0锛?锛?鍒嗗埆涓轰笉鍚岀殑鎿嶄綔
    {
        scanf("\n%s %d", str, t + i);//杈撳叆鎿嶄綔绗﹀拰鏁板瓧
        if (*str == 'O') op[i] = 1;              // 濡傛灉璇ユ搷浣滀负 OR 锛岄偅涔?op[i] 鍊间负 1
        else if (*str == 'X') op[i] = 2;         // 濡傛灉璇ユ搷浣滀负 XOR锛岄偅涔?op[i] 鍊间负 2
        else    op[i] = 3;                       // 鍚﹀垯璇ユ搷浣滀负 AND锛岄偅涔?op[i] 鍊间负 3
    }
鏄?0鐨勪節娆℃柟锛屽洜姝や簩杩涘埗琛ㄨ揪鐨勬椂鍊欐渶楂樹綅鏄29浣?
    for (int i = 29; ~i; i -- )                  // 鍥犱负鏈涓?m 鏈€澶ф槸 10 ^ 9锛宭og2(10 ^ 9) = 3log2(10 ^ 3) < 3 * 10 = 30锛屾墍浠ユ瘡娆?i 浠?29 寰€鍚庢灇涓惧氨鍙互浜?
        if (1 << i <= m)                         // 濡傛灉濉?1 鍚庡皬浜庣瓑浜?m锛岃鐪嬪～瀹屽悗瀵圭瓟妗堢殑褰卞搷鏉ュ～
        {
            bool x = calc(0, i), y = calc(1, i); // 鍏堝垎鍒鐞嗗嚭璇ヤ綅濉?0 鐨勭粨鏋滃拰璇ヤ綅濉?1 鐨勭粨鏋?
            if (x >= y) ans|= x << i;            // 濡傛灉璇ヤ綅濉?1 骞朵笉姣旇浣嶅～ 0 鏇翠紭锛岄偅涔堜负浜嗚鍓╀笅鑳藉～鐨勬暟鏇村ぇ锛屽湪璇ヤ綅濉?0
            else ans |= y << i, m -= 1 << i;     // 鍚﹀垯鍦ㄨ浣嶅～ 1锛屽～瀹屽悗璁?m 鍑忓幓璇ヤ綅濉?1 鐨勭粨鏋滐紝杩欐牱鍦ㄥ悗闈㈠～鏁扮殑鏃跺€欏彧鐢ㄨ€冭檻鏄惁澶т簬 m 灏卞彲浠ヤ簡
        }
        else ans |= calc(0, i) << i;             // 鍚﹀垯璇ヤ綅鍙兘濉?0,

    printf("%d\n", ans);
    return 0;
} */


#include<iostream>
#include<vector>
#include<string>
using namespace std;
vector<int>data;
vector<string>str;
int part(bool datas,int index){
	for(int i=0;i<str.size();i++){
		if(str[i]=="AND"){
			datas=datas&(data[i]>>index);
		}
		else if(str[i]=="XOR"){
			datas=datas^(data[i]>>index);
		}
		else if(str[i]=="OR"){
			datas=datas|(data[i]>>index);
		}
	}
	return datas;
}
int main(){
	int max,count;
	int temp;
	int ans=0;
	string temps;
	cin>>count>>max;
	for(int i=0;i<count;i++){//输入模块
		cin>>temps>>temp;
		data.push_back(temp);
		str.push_back(temps);
	}
	//输出模块
	for(auto i:data)
		cout<<i<<endl;
	for(int i=29;i>=0;i--){
		if((1<<i)<=count){
			if(part(1,i)>part(0,i))
				ans=ans+(1<<i);
			count-=1<<i;
		}
	}
	cout<<ans;
} 

 
